-- CAN_MONSTER_ATTACK_BACK

-----------------------------------------------
-- 怪物能否反击
-- @param  user     玩家
-- @param  monster  怪物
return function(user, monster)
    -- 怪物是否不能反击(玩家有不被反击属性、怪物被冻结、时间停止、怪物有不反击debuff、被眩晕)

    -- 1. 怪物已死亡
    if monster:isDead() then
        return "dead";
    end

    -- 2. 玩家有不被反击属性
    local prop = PropM.combine(user, "cant_be_attack", 1);
    if DungeonM.getRandSeed("can_be_attack") % 1000 <
            PropM.apply(prop, 1) then
        -- 该玩家不能被反击
        return "cant_be_attack_" .. prop[3];
    end

    -- 3. 怪物被冻结了
    prop = PropM.combine(monster, "frozen", 1);
    if PropM.apply(prop, 1) > 0 then
        -- 被冻结的怪物不能反击
        return "frozen";
    end

    -- 3. 怪物被眩晕了
    prop = PropM.combine(monster, "spin", 1);
    if PropM.apply(prop, 1) > 0 then
        -- 被眩晕的怪物不能反击
        return "spin";
    end

    -- 石化
    prop = PropM.combine(monster, "petrifaction", 1);
    if PropM.apply(prop, 1) > 0 then
        -- 被石化的怪物不能反击
        return "petrifaction";
    end

    -- 龙威震慑
    prop = PropM.combine(monster, "dragon_majesty", 1);
    if PropM.apply(prop, 1) > 0 then
        -- 被震慑的怪物不能反击
        return "dragon_majesty";
    end

    -- 4. 怪物时间停止中
    prop = PropM.combine(monster, "stop_action", 1);
    if PropM.apply(prop, 1) > 0 then
        -- 时间停止中，失效
        return "stop_action";
    end

    -- 5. 怪物有不能反击的debuff
    prop = PropM.combine(monster, "not_hit_back", 1);
    if PropM.apply(prop, 1) > 0 then
        -- 怪物不反击
        return "not_hit_back";
    end

    -- 6. 一般的冈布奥怪不能反击玩家
    if monster.type == OBJECT_TYPE_MONSTER and monster:isSlime() and
       not ArenaM.canStrikeBack(monster) then
        return "arena_slime";
    end

    -- 7. 只对玩家不反击的debuff
    prop = PropM.combine(monster, "not_hit_back2", 1);
    if PropM.apply(prop, 1) > 0 and user.type == OBJECT_TYPE_USER then
        -- 怪物不反击
        return "not_hit_back2";
    end

    -- 怪物有针对某召唤物不能反击的属性
    if user.type == OBJECT_TYPE_SUMMON then
        local summonId = user.class_id;
        prop = PropM.combine(monster, "not_hit_summon_back", summonId);
        if PropM.apply(prop, 1) > 0 then
            -- 怪物不反击
            return "not_hit_back";
        end
    end

    -- 没有其他情况了
    return true;
end
